package com.xiaoq.shop.service;

import com.xiaoq.shop.entity.UserCouponEntity;
import com.xiaoq.shop.vo.UserCouponDetailVo;
import com.xiaoq.vo.PagingVo;

import java.util.List;

/**
 * Created by chenjh on 2017/11/6.
 */
public interface IUserCouponService {

    /**
     *  根据店Id和用户id ,得到用户在该店的所有优惠券
     * @param shopId 商店Id
     * @param userId 用户Id
     * @return
     */
    UserCouponDetailVo getUserAllCouponList(String shopId, String userId);

    /**
     *  根据用户Id 得到用户所有的优惠券
     * @param userId 用户Id
     * @return
     */
    UserCouponDetailVo getUserAllCouponListByUserId(String userId);

    /**
     *  根据主键 得到用户某一具体的优惠券
     * @param userCouponId 用户Id
     * @return
     */
    UserCouponEntity getUserCouponById(String userCouponId);

    /**
     *  锁定优惠券，如果过期，则改为过期
     * @param userCouponId 券ID
     * @param userId 用户ID
     * @return
     */
    boolean lockUserCoupon(String userCouponId, String userId);

    /**
     *  释放优惠券，如果过期，则改为过期
     * @param userCouponId 券ID
     * @param userId 用户ID
     * @return
     */
    boolean releaseUserCoupon(String userCouponId, String userId);

    /**
     *  得到用户优惠券的数量
     * @param userId 用户的ID
     * @return
     */
    long getUserCouponCount(String userId);

    /**
     *  保存优惠券信息
     * @param userCouponEntity
     * @return
     */
    boolean saveUserCoupon(UserCouponEntity userCouponEntity);

    /**
     *  查询用户领取优惠券的数量
     * @param userId 用户ID
     * @param couponInstanceCode 优惠券ID
     * @return
     */
    long getUserCouponCount(String userId, String couponInstanceCode);

    /**
     * 修改优惠券的状态
     * @param userCouponId 用户券Id
     * @param userId 用户Id
     * @param status 状态
     */
    boolean updateUserCouponStatus(String userCouponId, String userId, int status);

    /**
     * 删除优惠券
     * @param userId 用户Id
     * @param userCouponId 优惠券
     * @return
     */
    boolean deleteUserCoupon(String userId, String userCouponId);

    /**
     *  得到未过期的优惠券信息
     * @param shopId 店ID,可为null
     * @param userId 用户ID,可为null
     * @return
     */
    List<UserCouponEntity> getNotExpiredCouponList(String shopId, String userId);


    /**
     * @param shopId
     * @param couponInstanceCodeList 是Coupon中的主键
     * @return
     */
    List<UserCouponEntity> getUserCouponList(String shopId, List<String> couponInstanceCodeList);

    /**
     * 定时任务用
     * @param couponInstanceCodeList 优惠券主键列表
     * @param pagingVo 分页参数
     * @return
     */
    List<UserCouponEntity> getUserCouponList4Schedule(List<String> couponInstanceCodeList, PagingVo pagingVo);
}
